import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;

/**
 * Kontrollklasse, hier liegt die main. Zunächst nur geringe Funktionalität. Instantiiere den ChefkochApiCrawler und lass ihn einmal suchen.
 */
public class Control {

    public static int debuggingmode = 0;


    static List<Recipe> list = new ArrayList<Recipe>();

    static ChefkochAPICrawler capi = new ChefkochAPICrawler();
    static ChefkochJSONRecipeExtractor rece = new ChefkochJSONRecipeExtractor(capi);

    public static void main(String[] args) throws IOException, InterruptedException {
        /*
           * Instantiiere den ChefkochApiCrawler und lass ihn einmal suchen.
           */


        int seitenzahl = 1;
        int zusatzrezepte = ChefkochAPICrawler.standardSucheLimit;
        boolean cancel = false;
        boolean warteAufEingabe = true;
        String s = "";
        while (cancel == false) {

            warteAufEingabe = true;

            while (warteAufEingabe == true) {
                try {
                    BufferedReader reader;
                    reader = new BufferedReader(new InputStreamReader(System.in));

                    System.out.println("\nJetzt " + list.size() + " Rezepte in Liste.");
                    System.out.println("\nWieviele weitere Rezepte? 0 - Abbruch. x - Gleich x Rezepte verarbeiten. ");

                    s = reader.readLine();

                    warteAufEingabe = false;
                    if (s.startsWith("0")) {
                        cancel = true;
                        listeSpeichern();
                        return;
                    } else {
                        if (s.contains("\n")) s.replaceAll("\n", "");
                        zusatzrezepte = Integer.parseInt(s);
                    }
                } catch (NumberFormatException e) {
                    System.out.println(e.getMessage() + "\nFalsche Eingabe - bitte nur 0 oder 1 eingeben.");
                    e.printStackTrace();
                    warteAufEingabe = true;
                }

            } // end of while der eingabeschleife

            seiteCrawlenUndExtrahieren(zusatzrezepte);
            zusatzrezepte = 0;


        } // end of while der hauptschleife
    } // end of main


    public static void seiteCrawlenUndExtrahieren(int zusatz) {
        String s = "";

        try {
            capi.setBufferSize(ChefkochAPICrawler.bufferCapGesamtRezeptListe);
            int length = list.size();

            s = capi.crawlVonBis(length, zusatz);
        } catch (IOException ioe) {
            System.out.println("Fehler beim Herunterladen der Rezepte. \nFehlernachricht: " + ioe.getMessage());
        }
        if (Control.debuggingmode == 1) System.out.print(s);


        try {
            list.addAll(rece.extractRecipes(s));
        } catch (IllegalArgumentException ioe) {
            System.out.println("Fehler beim Extrahieren der Rezepte. \nFehlernachricht: " + ioe.getMessage());
            ioe.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        if (Control.debuggingmode == 1) {
            for (int i1 = 0; i1 < list.size(); i1++) {
                System.out.println(list.get(i1).toString());
            }
            System.out.println("\nVerarbeitete Rezepte:\t" + list.size());
        }
    }

    public static void listeSpeichern() {
        //TODO: hier datenbankanbindung, datentyp list
    }

}
